package com.base_data_handler.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

import org.apache.log4j.Logger;

import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.wall.WallConfig;
import com.alibaba.druid.wall.WallFilter;
import com.base_data_handler.sx.task.SX_Area_Position_Task;
import com.base_data_handler.sx.task.SX_Auto_Position_Task;
import com.base_data_handler.sx.task.SX_DataClear_Task;
import com.base_data_handler.sx.task.SX_Forcast_Task;
import com.base_data_handler.sx.task.SX_Warning_Task;
import com.base_data_handler.utils.DruidPlugin;
import com.base_data_handler.utils.PropertiesUtil;
import com.base_data_handler.utils.QuartzPlugin;

/**
 * Application Lifecycle Listener implementation class StartListener
 *
 */
@WebListener
public class StartListener implements ServletContextListener {


	public static Logger log = Logger.getLogger(StartListener.class.getName()); 
    DruidPlugin	druidPlugin;
	public StartListener() {
		if(log.isInfoEnabled()) log.info("configPlugin 配置Druid数据库连接池连接属性");
    	druidPlugin=new DruidPlugin(PropertiesUtil.JDBC_URL, PropertiesUtil.JDBC_USER,
    	    	PropertiesUtil.JDBC_PASS, PropertiesUtil.JDBC_DRIVER); 
		if(log.isInfoEnabled()) log.info("configPlugin 配置Druid数据库连接池大小");
		druidPlugin.set(PropertiesUtil.JDBC_INITIALSIZE, PropertiesUtil.JDBC_MINIDLE, PropertiesUtil.JDBC_MAXACTIVE);
		
		if(log.isInfoEnabled()) log.info("configPlugin 配置Druid数据库连接池过滤器配制");
		druidPlugin.addFilter(new StatFilter());
		WallFilter wall = new WallFilter();
		wall.setDbType(PropertiesUtil.type);
		WallConfig config = new WallConfig();
		config.setFunctionCheck(false); // 支持数据库函数
		wall.setConfig(config);
		druidPlugin.addFilter(wall);
		
		// TODO Auto-generated constructor stub
		log = Logger.getLogger(StartListener.class.getName());
		log.debug("**************数据处理程序启动初始化QuartzPlugin中**************");
		QuartzPlugin.start();
    	log.debug("**************数据处理程序启动初始化中**************");
	}
	@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		druidPlugin.stop();
		// TODO Auto-generated method stub
		log.debug("**************数据处理程序已关闭**************");
		QuartzPlugin.deleteJob("AirAllCityGet2DB");
		QuartzPlugin.deleteJob("AirCntyInCityGet2DB");
		QuartzPlugin.deleteJob("WeatherGet2Db");
		QuartzPlugin.deleteJob("AirGet2DB");
		QuartzPlugin.deleteJob("WeatherGet2Db");
		QuartzPlugin.deleteJob("AirGet2DB");
		QuartzPlugin.deleteJob("WeatherGet2Db");
		
		QuartzPlugin.deleteJob("task1");
		QuartzPlugin.deleteJob("task2");
		QuartzPlugin.deleteJob("task3");
		QuartzPlugin.deleteJob("task4");
		QuartzPlugin.deleteJob("task5");
		QuartzPlugin.deleteJob("task6");
		QuartzPlugin.deleteJob("task7");
	}

	@Override
	public void contextInitialized(ServletContextEvent arg0) {
		druidPlugin.start();
		/**
		 *  全国空气质量  每小时 15分35分分别更新
		 */
		log.debug("**************数据处理程序已启动**************");
//		QuartzPlugin.addJob("AirAllCityGet2DB",  "0 15,35, * * * ?", AirAllCityGet2DB.class);
		/**
		 * 各市下站点空气质量 全国空气质量  每小时 17分38分分别更新
		 */
//		QuartzPlugin.addJob("AirCntyInCityGet2DB",  "0 17,38 * * * ?", AirCntyInCityGet2DB.class);
//		/**
//		 * 每1小时更新一次，全国天气实况预报生活指数等数据
//		 */
//		QuartzPlugin.addJob("WeatherGet2Db",  "0 0 */1 * * ?", WeatherGet2Db.class);
		
//		/**
//		 * 2小时预报 5分钟更新一次
//		 */
//		QuartzPlugin.addJob("ChinaWeatherGet2HRainFocast2Db",  "0 */5 * * * ?", ChinaWeatherGet2HRainFocast2Db.class);
//		
//		/**
//		 * 全国雷达图10分钟更新一次
//		 */
//		QuartzPlugin.addJob("ChinaWeatherGet3Radar2Db",  "0 */10 * * * ?", ChinaWeatherGet3Radar2Db.class);
//		/**
//		 * 全国3小时降水图 3小时更新一次
//		 */
//		QuartzPlugin.addJob("ChinaWeatherGet3Rain2Db",  "0 0 */3 * * ?", ChinaWeatherGet3Rain2Db.class);
//		/**
//		 * 全国3小时温度图 3小时更新一次
//		 */
//		QuartzPlugin.addJob("ChinaWeatherGet3Temp2Db",  "0 0 */3 * * ?", ChinaWeatherGet3Temp2Db.class);
//		/**
//		 * 全国整点小时雨量实况图1小时更新一次
//		 */
//		QuartzPlugin.addJob("ChinaWeatherGetRealRain2Db",  "0 0 */1 * * ?", ChinaWeatherGetRealRain2Db.class);
//		/**
//		 * 全国整点小时温度实况图1小时更新一次
//		 */
//		QuartzPlugin.addJob("ChinaWeatherGetRealTemp2Db",  "0 0 */1 * * ?", ChinaWeatherGetRealTemp2Db.class);

		/**
		 * 自动站数据同步 每小时两次 ，整点5分钟和10分钟15分钟执行
		 */
		QuartzPlugin.addJob("task1",  "0 5,10,15,20 * * * ?", SX_Auto_Position_Task.class);
		/**
		 * 区域站数据同步 每小时两次，整点的7分 和14分钟执行
		 */
		QuartzPlugin.addJob("task2",  "0 7,14,21, * * * ?", SX_Area_Position_Task.class);
		/**
		 * 预警信息数据同步 每3分钟执行一次
		 */
//		QuartzPlugin.addJob("task3",  "0 */3 * * * ?", SX_Warning_Task.class);
		/**
		 * 精细化要素预报数据同步  每1小时执行一次
		 */
		QuartzPlugin.addJob("task4",  "0 15,25,35 */1 * * ?" ,  SX_Forcast_Task.class);
		/**
		 * 清除数据，每天凌晨4点钟执行
		 */
		QuartzPlugin.addJob("task5",  "0 0 4 * * ?" ,  SX_DataClear_Task.class);
		
		/**
		 * pdf文件上传
		 */
//		QuartzPlugin.addJob("task6",  "0 */1 * * * ?" ,  SX_FileUplod_Task.class);
		/**
		 * 安康西南雷达采集 6分钟一次 
		 */
//		QuartzPlugin.addJob("task7",  "0 */6 * * * ?" ,  AK_Radar_Xn_Task.class);

	}
	
}
